 ,        ,  ,    .

1)   -   X(t: REAL): REAL; 
 t -   ;     ,        t := t - ENTIER(t); 
  t := Math.Frac(t);
(     X(f*t),  f -    );
  [-1 .. +1].

2)   f   X(f*t)         .
,    Y(t) = 1/2 * (X(f * t) + X((f + df) * t)),  ,  , ""
    T = 1 / df.  Y-       , 
     (     ,   )
 -   .

,     X-.         
 , ..       -  ,
        .
 ,        (t - t0) * (t - t1) * (t - t2) ...,     -  .
 ,    X-   , -         .

, ,  X-  :

PROCEDURE Hills (t: REAL): REAL;
BEGIN t := Math.Frac(t);
  IF (0 <= t) & (t <= 0.2) THEN RETURN 1 / (1 + 100000 * (0.2 - t) / 0.2)
  ELSIF (0.2 < t) & (t <= 0.4) THEN RETURN 0.5 + 0.5 * (t - 0.3) * (t - 0.3) / 0.01
  ELSIF (0.4 < t) & (t <= 0.6) THEN RETURN 1 + 10 * (0.4 - t)
  ELSIF (0.6 < t) & (t <= 0.8) THEN RETURN -0.5 - 0.5 * (t - 0.3) * (t - 0.3) / 0.01
  ELSIF (0.8 < t) & (t <= 1.0) THEN RETURN - 1 / (1 + 100000 * (t - 0.8) / 0.2)
  ELSE RETURN 0.0
  END
END Hills;

PROCEDURE Y (t: REAL): REAL;
  CONST f = 80;
BEGIN
  RETURN 1/3 * (Hills(f * t) + Hills((f + 1/2) * t) + Hills((f + 1/4) * t))
END Y;

  ,      " "  X-...
